package com.chain.qs.common.web;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.util.AntPathMatcher;
import org.springframework.web.socket.config.annotation.AbstractWebSocketMessageBrokerConfigurer;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;

@Configuration
@ComponentScan(basePackages = "com.chain.qs.common.web")
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractWebSocketMessageBrokerConfigurer {

//    @Value("${mq.ip}")
//    private String url;
//
//    @Value("${mq.stomp.port}")
//    private int port;
//
//    @Value("${mq.loginName}")
//    private String loginName;
//
//    @Value("${mq.password}")
//    private String pwd;

	@Override
	public void configureMessageBroker(MessageBrokerRegistry registry) {
//        registry.enableStompBrokerRelay("queue", "topic").setRelayHost(url).setRelayPort(port)
//                .setSystemLogin(loginName).setSystemPasscode(pwd)
//                .setClientLogin(loginName).setClientPasscode(pwd);

        registry.enableSimpleBroker("queue", "topic");
        registry.setApplicationDestinationPrefixes("/app");
//        registry.setUserDestinationPrefix("/user");
        registry.setPathMatcher(new AntPathMatcher("."));
}


    /**
     * 将"/endpoint"路径注册为STOMP端点，这个路径与发送和接收消息的目的路径有所不同，这是一个端点，客户端在订阅或发布消息到目的地址前，要连接该端点，
     * 即用户发送请求url="/applicationName/endpoint"与STOMP server进行连接。之后再转发到订阅url；
     * PS：端点的作用——客户端在订阅或发布消息到目的地址前，要连接该端点。
     * @param registry
     */
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/endpoint").withSockJS().setClientLibraryUrl("../../static/modules/biz/monitorCenter/webSocket/sockjs-1.0.0.min.js");
    }


    /**
     *
     *
     * registry.enableSimpleBroker("/topic", "/user");这句话表示在topic和user这两个域上可以向客户端发消息。

     registry.setUserDestinationPrefix("/user");这句话表示给指定用户发送一对一的主题前缀是"/user"。

     registry.setApplicationDestinationPrefixes("/app");这句话表示客户单向服务器端发送时的主题上面需要加"/app"作为前缀。

     stompEndpointRegistry.addEndpoint("/hello").setAllowedOrigins("*").withSokJS();这个和客户端创建连接时的url有关，其中setAllowedOrigins()方法表示允许连接的域名，withSockJS()方法表示支持以SockJS方式连接服务器。
     */
}

